#ifndef _KLAS_VECTOR2_HPP_
#define _KLAS_VECTOR2_HPP_

#include "../Platform.hpp"
#include "../error/Exception.hpp"

namespace klas
{
  namespace math
  {
    //! Utility class that abstracts vector math.
    template<typename T>
    class KLAS_API Vector2
    {
    public:
      /* Ctor / Dtors */
      Vector2();
      Vector2(T X, T Y);
      ~Vector2();

      /* Member variables */
      T x, y;

      /* Operator overloads */
      Vector2& operator +=(const Vector2& other);
      Vector2& operator -=(const Vector2& other);
      Vector2& operator *=(const Vector2& other);
      Vector2& operator /=(const Vector2& other);

      Vector2 operator +(const Vector2& lhs);
      Vector2 operator -(const Vector2& lhs);
      Vector2 operator *(const Vector2& lhs);
      Vector2 operator /(const Vector2& lhs);
    };

    typedef Vector2<double> Vector2d;

    #include "../../src/math/Vector2.inl"
  }
}

#endif